热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

常数|界限_Verilog学习笔记

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Verilog学习笔记相关的知识,希望对你有一定的参考价值。文章目录

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Verilog学习笔记相关的知识,希望对你有一定的参考价值。



文章目录


          • 参考来源:china.pub.com


      • 一、Verilog HDL简介
        • 1.1 Verilog HDL

      • 二、HDL指南
        • 2.1 模块(module)
        • 2.2时延
        • 2.3数据流描述方式
        • 2.4行为表述方式
        • 2.5 结构化描述形式
        • 2.6混合设计描述方式

      • 三、Verilog语言要素
        • 3.1标识符
        • 3.2 注释
        • 3.3编译指令
        • 3.4 值集合
        • 3.5 数据类型
          • 3.5.1线网类型
          • 3.5.2 寄存器类型

        • 3.6参数

      • 四、表达式
        • 4.1操作数
        • 4.2操作符





参考来源:china.pub.com

一、Verilog HDL简介


1.1 Verilog HDL


  • Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的

数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之

间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。


  • Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构

组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模

语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设

计外部访问设计,包括模拟的具体控制和运行。


二、HDL指南


2.1 模块(module)


  • 基本语法:
    • 说明部分语句最好放在module开头部分
    • 端口默认大小为一位,线网型(线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。)

module module name (port list)i
Declarations
reg, wire, parameter,
input, output, inout
function, task,
statements
Initial statement
Always statement
Module ins tantiation
Gate instantiation
UDP instantiation
Continuous assignment
endmodule

2.2时延

`` timescale** 1ns /100ps`编译器指令在模块描述前定义,表示时延时间单位为 1 n s并且时间精度为100ps

#2表示2个时间单位


2.3数据流描述方式


  • 连续赋值语句
    • 语法:assign [delay] LHS_net = RHS_ expression
    • 右表达式使用的操作数一旦发生变化 , 右边表达式都重新计算 , 在指定的时延后变化值(默认为0)被赋予左边表达式的线网类型变量。
    • 连续赋值语句只能为线网类型变量赋值
    • 连续赋值语句是并发执行的,各语句的执行顺序与其在描述中出现的顺序无关

2.4行为表述方式


  • initial语句


    • 只执行一次
  • always语句


    • 循环执行

    • 语法:’,'和“or”都可以分割敏感事件,可以用“*”代表所有输入信号,always 语句中有一个与事件控制(紧跟在字符@ 后面的

      表达式)。相关联的顺序过程( begin - end对)。

      always@ *
      always@ (posedge clk1,negedge clk2)
      always@ (a or b)
      begin
      //顺序过程
      end

    • 在顺序过程中出现的语句是过程赋值模块化的实例。模块化过程赋值在下一条语句执行前完成执行。过程赋值可以有一个可选的时延。分为语句间(时延语句执行的时延)、内(右边表达式数值计算与左边表达式赋值间的时延)时延

  • 寄存器类型数据能够在这两种语句中被赋值。寄存器类型数据在被赋新值前保持原有值不变。

  • 所有的初始化语句和 always语句在0时刻并发执行。


2.5 结构化描述形式


  • 内置门原语(在门级);XOR,OR,AND
  • 开关级原语(在晶体管级);
  • 用户定义的原语(在门级);
  • 模块实例 (创建层次结构)。

2.6混合设计描述方式


  • 模块描述中可以包含实例化的门、模块实例化语句、连续赋值语句以及 always语句和initial语句的混合。它们之间可以相互包含。来自 always语句和initial语句(切记只有寄存器类型数据可以在这两种语句中赋值)的值能够驱动门或开关,而来自于门或连续赋值语句(只能驱动线网)的值能够反过来用于触发always语句和initial语句。

三、Verilog语言要素


3.1标识符


  • 标识符是任意一组字母、数字、 $符号和_(下划线)符号的组合,但第一个字符必须是字母或者下划线。标识符区分大小写。
  • 转义标识符在一条标识符中包含任何可打印字符。转义标识符以 \\ (反斜线)符号开头,以空白结尾

3.2 注释


  • / *第一种形式:可以扩展至
    多行 * /
    / /第二种形式:在本行结束。


3.3编译指令


指令使用含义
define** | ** define MAX _BUS _SIZE 3 2用于文本替换,它很像 C语言中的#define 指令
undef** | ** undef MAX _BUS _SIZE 3 2指令取消前面定义的宏。
ifdef else 、endif条件编译
default_nettype** | **default_nettype wand令用于为隐式线网指定线网类型。是将那些没有被说明的连线定义线网类型。
include** | ** include " . . / . . /primitives.v用于嵌入内嵌文件的内容。文件既可以用相对路径名定义,也可以用全路径名定义
resetall** | **resetall将所有的编译指令重新设置为缺省值。
timescale** | ** timescale time _ unit / time _ preciso用于定义时延的单位time _ unit和时延精度time _ preciso

3.4 值集合


01zx
含义逻辑0或“假”逻辑1或“真”高阻未知

  • 字符串的表示方式:字符串是双引号内的字符序列。字符串不能分成多行书写。用8位A S C I I值表示的字符可看作是无符号整数。

“INTERNAL ERROR”

reg [1:8*14] Message;


3.5 数据类型


3.5.1线网类型

  • 语法:net_kind[msb:lsb] net1, net2, . . . ,netN;

  • net _kind 是线网类型。 msblsb是用于定义线网范围的常量表达式;范围定义是可选的,缺省的线网类型为 1位。

  • 类型


    类型含义有效值表
    wire和t r i线网用于连接单元的连线是最常见的线网类型。三态线可以用于描述多个驱动源驱动同一根线的线网类型;
    wor和t r i o r线网线或指如果某个驱动源为 1,那么线网的值也为 1。
    wand和t r i a n d线网线与( w a n d )网指如果某个驱动源为 0,那么线网的值为 0。
    trireg线网此线网存储数值(类似于寄存器),并且用于电容节点的建模。当三态寄存器 ( t r i r e g )的所有驱动源都处于高阻时,三态寄存器线网保存作用在线网上的最后一个值。三态寄存器线网的缺省初始值为 x
    tri0和t r i 1线网这类线网可用于线逻辑的建模,即线网有多于一个驱动源。
    supply0、supply1线网s u p p l y 0用于对“地”建模,即低电平 0;s u p p l y 1网用于对电源建模,即高电平 1;

3.5.2 寄存器类型

类型使用含义
regreg [ msb: lsb] reg1, reg2, . . . r e g N;reg是最常见的数据类型。msbl s b 定义了范围。范围定义是可选的;缺省值为1位寄存器。
存储器数组的维数不能大于 2。注意存储器属于寄存器数组类型。
Integer缺省32位。整数不能作为位向量访问。种截取位值的方法是将整数赋值给一般的 r e g类型变量,然后从中选取相应的位
timetime类型的寄存器用于存储和处理时间。缺省64位。只存储无符号数。
real和realtimerealtime与real类型完全相同。r e a l说明的变量的缺省值为0。不允许对r e a l声明值域、位界限或字节界限。

3.6参数


  • 参数是一个常量。参数经常用于定义时延和变量的宽度。使用参数说明的参数只被赋值一次。
  • 语法:

四、表达式


4.1操作数


  • 操作数类型:


    1. 常数

    2. 参数

    3. 线网

    4. 寄存器

    5. 位选择

    6. 部分选择

    7. 存储器单元

    8. 函数调用

  • 如果选择表达式的值为xz,或越界,则位选择、部分选择的值为 x

  • 位选择


    • 位选择从向量中抽取特定的位。net _or_reg _vector [bit _select _expr]
  • 部分选择


    • 在部分选择中,向量的连续序列被选择,范围表达式必须为常数表达式。

  • 存储器单元


    • 存储器单元从存储器中选择一个字。memory [word _address]

    • 不允许对存储器变量值部分选择或位选择。在存储器中读取一个位或部分选择一个字的方法如下:将存储器单元赋值给寄存器变

      量,然后对该寄存器变量采用部分选择或位选择操作。


4.2操作符


  • 优先级。下表显示了所有操作符的优先级和名称。

    操作符从最高优先级(顶行)到最低优先级底行)排列。同一行中的操作符优先级相同。

    除条件操作符从右向左关联外,其余所有操作符自左向右关联。

  • 按位操作符,有效值表

  • 连接和复制操作


    • 连接操作是将小表达式合并形成大表达式的操作


      • 形式 e x p r 1, e x p r 2, . . .,e x p r N

      • 由于非定长常数的长度未知 , 不允许连接非定长常数。

      • 实例

    • 复制通过指定重复次数来执行操作。


      • 形式:repetition_number expr1, expr2, …,exprN

      • 实例


推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • NFS文件共享系统
    1、概述:NFS(NetworkFileSystem)意为网络文件系统,它最大的功能就是可以通过网络,让不同的机器不同的操作系统可以共享 ... [详细]
  • c# java socketn 字节流_C#Socket编程详解(一)TCP与UDP简介
    一、TCP与UDP(转载)1、TCP1.1定义TCP(TransmissionControlProtocol)传输控制协议。是一种可靠的、面向连接的协议(eg:打电话)、传输效率低 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
  • <ItemTemplate><ahref#onclickjavascript:window.location.hrefoa_NoReply.aspx?fid ... [详细]
  • SQL Server 2017 Express限制研究
    MicrosoftSQLServer2017Express是一个功能强大且可靠的免费数据管理系统,它为轻量级网站和桌面应用程序提供丰富和可靠的数据存储。版本ÿ ... [详细]
  • 小白的Python 学习笔记(八)推导式详解
    大家好,今天我总结一下Python的推导式,首先让我们来看定义推导式(comprehensions)是Python的一种独有特性,是可以从一个数据序列构建另一个新的数据序列的结构体 ... [详细]
  • 实验2:Open vSwitch虚拟交换机实践   实验3:OpenFlow协议分析实践
    实验2:OpenvSwitch虚拟交换机实践一、实验目的能够对OpenvSwitch进行基本操作;能够通过命令行终端使用OVS命令操作OpenvSwitch交换机,管理流表;能够通 ... [详细]
author-avatar
销销销hdbuaj
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有